package com.sky.mapper;

import com.github.pagehelper.Page;
import com.sky.annotation.AutoFile;
import com.sky.dto.DishPageQueryDTO;
import com.sky.entity.Category;
import com.sky.entity.Dish;
import com.sky.enumeration.OperationType;
import com.sky.vo.DishVO;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface DishMapper {

    /**
     * 新增菜品
     * @param dish
     * @return 新增的菜品id
     */
    @AutoFile(value = OperationType.INSERT)
    //使用@Options注解，将数据库生成的主键值，赋值给dishDTO对象的id属性
    @Insert("insert into dish (name, category_id, price, image, description, status, create_time, update_time, create_user, update_user) " +
            "values (#{name}, #{categoryId}, #{price}, #{image}, #{description}, #{status}, #{createTime}, #{updateTime}, #{createUser}, #{updateUser})")
    @Options(keyProperty = "id", useGeneratedKeys = true)
    void insert(Dish dish);

    /**
     * 分页查询菜品
     * XML配置
     * @param dishPageQueryDTO
     * @return
     */
    Page<DishVO> pageQuery(DishPageQueryDTO dishPageQueryDTO);

    /**
     * 根据分类id查询菜品
     * @param categoryId
     * XML配置
     * @return
     */
    @Select("select * from dish where category_id = #{categoryId}")
    List<Dish> getListByCategoryId(Long categoryId);
    /**
     * 根据id查询菜品数据
     * @param {id}
     * xml配置文件
     * @return
     */
    DishVO getDishVOById(Long id);
    /**
     * 批量删除菜品
     * XML配置
     * @param ids
     * @return
     */
    int deleteBatch(List<Long> ids);
    /**
     * 修改菜品
     * @param dish
     * @return
     */
    @AutoFile(value = OperationType.UPDATE)
    int EditDish(Dish dish);
    /**
     * 根据ids查询菜品(status=1)的name
     * XML配置
     * @param ids
     * @return
     */
    List<String> getStatusNamesByIds(List<Long> ids , Integer status);
    /**
     * 根据分类id批量处理绑定的菜品状态
     * @param category
     * XML配置
     */
    @AutoFile(value = OperationType.UPDATE)
    @Update("update dish set status = #{status} , update_time = #{updateTime}, update_user = #{updateUser} where category_id = #{id}")
    void updateStatusById(Category category);
    /**
     * 条件查询菜品和口味
     * XML配置
     * @param dish
     * @return
     */
    List<DishVO> ParamQueryDishVO(Dish dish);
    /**
     * 根据菜品ids查询所属分类
     * @param ids
     * @return
     */
    List<Long> getCategoryIdsByDishIds(List<Long> ids);

    /**
     * 根据状态查询菜品数量
     * @param status
     * @return
     */
    @Select("select count(id) from dish where status = #{status}")
    Integer getDishStatusCountById(Integer status);
}
